package com.ww.juc.completable.future.when;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

/**
 * whenComplete和whenCompleteAsync
 * whenComplete是当某个任务执行完成后执行的回调方法，会将执行结果或者执行期间抛出的异常传递给回调方法，如果是正常执行则异常为null，回调方法对应的CompletableFuture
 * 的result和该任务一致，如果该任务正常执行，则get()方法返回执行结果，如果执行异常，则get方法抛出异常。
 * @author wanggw
 * 2024年2月4日 下午5:51:43
 */
public class WhenCompleteDemo {

	@SuppressWarnings("unused")
	public static void main(String[] args) throws InterruptedException, ExecutionException {
		CompletableFuture<Integer> cf1 = CompletableFuture.supplyAsync(() -> {
			System.out.println(Thread.currentThread() + "开始执行了...");
			int a = 1 / 0;
			return 1;
		});

//		Thread[ForkJoinPool.commonPool-worker-25,5,main]开始执行了...
//		上个任务结果：null
//		上个任务异常：java.util.concurrent.CompletionException: java.lang.ArithmeticException: / by zero
//		Thread[main,5,main]任务做了...啥

		CompletableFuture<Integer> cf2 = cf1.whenComplete((result, e) -> {
			System.out.println("上个任务结果：" + result);
			System.out.println("上个任务异常：" + e);
			System.out.println(Thread.currentThread() + "任务做了...啥");
		});
		
		System.out.println("执行结果：" + cf2.get());
	}
}
